import pygame
from typing import Tuple

from game.stat import Stat
from game.sprites.base import Entity, Frames
from game.world.coordinate import Coordinate
from game.data.plot.plot import Dialog


class Mob(Entity):
    
    def __init__(
        self,
        
        coordinate: Coordinate,
        
        groups: Tuple[pygame.sprite.Group, ...],
        frames: Frames,
        
        stat: Stat | None = None,

        dialog: Dialog | None = None,
        can_interact: bool = False,
        can_communicate: bool = False
    ):
        super().__init__(coordinate, groups, frames, dialog, can_interact, can_communicate)

        self.stat = stat or Stat()

        self.hp = self.stat.health
        
    def moveTo(self, dest: Coordinate) -> bool:
        raise NotImplementedError
        
    def update(self) -> None:
        super().update()


class MobStatic(Entity):
    
    def __init__(
        self,
        
        coordinate: Coordinate,
        
        groups: Tuple[pygame.sprite.Group, ...],
        frames: Frames,
        
        stat: Stat | None = None,

        dialog: Dialog | None = None,
        can_interact: bool = False,
        can_communicate: bool = False
    ):
        super().__init__(coordinate, groups, frames, dialog, can_interact, can_communicate)

        self.stat = stat or Stat()

        self.hp = self.stat.health
        
    def moveTo(self, dest: Coordinate) -> bool:
        raise NotImplementedError
        
    def update(self) -> None:
        super().update()